package com.xx.xunyou.serviceImpl;

import com.xx.springBootUtil.beanUtils.BeanUtilsExtends;
import com.xx.springBootUtil.excption.BaseException;
import com.xx.springBootUtil.util.ObjectHelper;
import com.xx.xunyou.dao.item.XunyouItemTypeDao;
import com.xx.xunyou.entity.item.XunyouItemType;
import com.xx.xunyou.entity.item.vo.XunyouItemTypeTopAndSonsVo;
import com.xx.xunyou.entity.item.vo.XunyouItemTypeVo;
import com.xx.xunyou.service.ItemTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @program: xunyou-parent
 * @author: zhl
 * @create: 2019-04-16
 **/
@Service
public class ItemTypeServiceImpl implements ItemTypeService {

    @Autowired
    private XunyouItemTypeDao xunyouItemTypeDao;

    @Autowired
    private ItemTypeService itemTypeService;

    @Override
    public XunyouItemType findByIdToManager(Integer parentId) {
        return xunyouItemTypeDao.selectByPrimaryKey(parentId);
    }

    @Override
    public Integer queryListCountToManager(Map<String, Object> map) {
        return xunyouItemTypeDao.queryListCountToManager(map);
    }

    @Override
    public List<Map> queryListToManager(Map<String, Object> map) {
        return xunyouItemTypeDao.queryListToManager(map);
    }

    @Override
    @Transactional
    public void insert(XunyouItemType xunyouItemType) {
        xunyouItemType.setCreateTime(new Date());
        xunyouItemTypeDao.insertSelective(xunyouItemType);
    }

    @Override
    @Transactional
    public void deleteById(Integer typeId) {
        xunyouItemTypeDao.deleteById(typeId);
    }

    @Override
    @Transactional
    public void recoveryById(Integer typeId) {
        xunyouItemTypeDao.recoveryById(typeId);
    }

    @Override
    @Transactional
    public void update(XunyouItemType xunyouItemType) {
        xunyouItemType.setTypeKey(null);
        xunyouItemType.setParentId(null);
        xunyouItemTypeDao.updateByPrimaryKeySelective(xunyouItemType);
    }

    @Override
    public List<XunyouItemType> querySonByParentKeyToManager(String parentKey) {
        return xunyouItemTypeDao.querySonByParentKeyToManager(parentKey);
    }

    @Override
    public List<XunyouItemTypeTopAndSonsVo> queryTopToAPPIndex() {
        return xunyouItemTypeDao.queryTopToAPPIndex();
    }

    @Override
    public XunyouItemType queryByTypeKey(String Key) {
        return xunyouItemTypeDao.queryByKey(Key);
    }

    @Override
    public List<XunyouItemType> querySonById(Integer typeId) {
        return xunyouItemTypeDao.querySonById(typeId);
    }

    @Override
    public XunyouItemType queryById(Integer typeId) {
        return xunyouItemTypeDao.selectByPrimaryKey(typeId);
    }

    @Override
    public XunyouItemTypeTopAndSonsVo queryItemTypeTopAndSonsVoByTypeKey(String parentTypeKey, String typeKey) {
        XunyouItemTypeTopAndSonsVo xunyouItemTypeTopAndSonsVo = new XunyouItemTypeTopAndSonsVo();
        XunyouItemType xunyouItemType = itemTypeService.queryByTypeKey(parentTypeKey);
        BeanUtilsExtends.copyProperties(xunyouItemTypeTopAndSonsVo, xunyouItemType);
        List<XunyouItemTypeVo> sonItemTypes = new ArrayList<>();
        if(typeKey==null||typeKey.equals(parentTypeKey)){

            List<XunyouItemType> xunyouItemTypes = itemTypeService.querySonById(xunyouItemType.getTypeId());
            if (ObjectHelper.isNotEmpty(xunyouItemTypes)){

                for (XunyouItemType itemType : xunyouItemTypes) {
                    XunyouItemTypeVo xunyouItemTypeVo = new XunyouItemTypeVo();
                    BeanUtilsExtends.copyProperties(xunyouItemTypeVo, itemType);
                    sonItemTypes.add(xunyouItemTypeVo);
                }
            }

        } else {
            //说明是子集
            XunyouItemType xunyouItemType1 = itemTypeService.queryByTypeKey(typeKey);
            if(xunyouItemType1==null){
                throw new BaseException("参数有误！");
            }
            XunyouItemTypeVo xunyouItemTypeVo = new XunyouItemTypeVo();
            BeanUtilsExtends.copyProperties(xunyouItemTypeVo, xunyouItemType1);
            sonItemTypes.add(xunyouItemTypeVo);
            //查询父级
            XunyouItemType xunyouItemType2 = itemTypeService.queryById(xunyouItemType1.getParentId());
            if (xunyouItemType2==null){
                throw new BaseException("数据有误！");
            }
            if (!xunyouItemType2.getTypeKey().equals(parentTypeKey)) {
                throw new BaseException("参数有误！");
            }

        }
        xunyouItemTypeTopAndSonsVo.setItemTypeSons(sonItemTypes);

        return xunyouItemTypeTopAndSonsVo;
    }
}
